
package Piso;

import Coleccionable.Coleccionable;
import Obstaculo.Obstaculo;
import Premio.Premio;
import Principal.Posicion;

/**
 * Clase Piso
 * @author Alonso,Reissing,Veroni
 *
 */
public abstract class Piso {
	
protected Coleccionable colec;
protected Obstaculo obs;
protected Premio premio;
protected Posicion pos;

/**
 * Consulta por el premio
 * @return El premio que se encuentre en el piso, nulo si no contiene
 */
public Premio getPremio(){
	return premio;
}

/**
// * Consulta por el coleccionable
 * @return Un coleccionable si el piso contiene uno, nulo en caso contrario.
 */
public Coleccionable getColeccionable(){
	return colec;
}

/**
 * Consulta por el obstaculo.
 * @return Un obstaculo si el piso contiene uno, nulo en caso contrario.
 */
public Obstaculo getObstaculo(){
	return obs;
}

/**
 * Consulta si hay premio.
 * @return Verdadero si tiene premio, Falso en caso contrario.
 */
public boolean hayPremio(){
	return premio!=null;
}

/**
 * Consulta si hay coleccionable.
 * @return Verdadero si tiene coleccionable, Falso en caso contrario.
 */
public boolean hayColeccionable(){
	return colec!=null;
}

/**
 * Consulta si hay obstaculo
 * @return Verdadero si tiene obstaculo, Falso en caso contrario.
 */
public boolean hayObstaculo(){
	return obs!=null;
}

/**
 * Agrega un obstaculo al piso
 * @param o Obstaculo a agregar
 */
public void agregarObstaculo(Obstaculo o) {
	/*if colec!=null
	 * throw new Exception(No se puede haber una obstaculo si existe un coelccionable);
	 * 
	 */
	obs=o;
}

/**
 * Agrega un premio al piso.
 * @param p el premio a agregar.
 */
public void agregarPremio(Premio p) {
	/*if hayColeccionable()
	 * throw new Exception(No puede haber premio y coleccionable)
	 */
	premio=p;
}

/**
 * Agrega un coleccionable al piso.
 * @param c coleccionable a agregar.
 */
public void agregarColeccionable(Coleccionable c) {
	/*if (hayObstaculo()||hayPremio())
	 * throw new Exception(No se peude agreagar un coleccionable si hay un coleccionable y/o premio)
	 */
	 colec=c;
}

/**
 * Elimina el premio del piso si es que existe.
 */
public void eliminarPremio(){
	if (hayPremio()) 
		premio=null;
}

/**
 * Elimina el coleccionable del piso si es que existe.
 */
public void eliminarColeccionable() {
	if (hayColeccionable()) 
		colec=null;
}

/**
 * Elimina el obstaculo del piso si es que existe.
 */
public void eliminarObstaculo() {
	if (hayObstaculo()) 
		obs=null;
}

/**
 * Consulta si el piso es transitable
 * @return Verdadero si el piso es transitable, Falso en caso contrario.
 */
public abstract boolean esOcupable();

/**
 * Consulta por la identificacion del piso
 * @return Nombre del piso
 */
public abstract String getNombre();

/**
 * Consulta por la posicion del piso
 * @return Posicion del piso.
 */
public Posicion getPosicion() {

	return pos;
}

/**
 * Setea la posicion
 * @param posn posicion nueva
 */
public void setPosicion(Posicion posn) {
	pos=posn;
	
} 
}
